package Z006ClassAndObject.CO008FangWenXiuShi;
import Z006ClassAndObject.CO002JiCheng.Weapon;

public class FangWenXiuShi {



}
/**
 * 成员变量有四种修饰符
 * private 私有的
 * package/friendly/default 不写
 * protected 受保护的
 * public 公共的
 */


// 类与类之间的关系
/**
 * 类和类之间的关系有如下几种:
 * 以Hero为例
 * 自身：指的是Hero自己
 * 同包子类：ADHero这个类是Hero的子类，并且和Hero处于同一个包下
 * 不同包子类：Support这个类是Hero的子类，但是在另一个包下
 * 同包类： GiantDragon 这个类和Hero是同一个包，但是彼此没有继承关系
 * 其他类：Item这个类，在不同包，也没有继承关系的类
 */


// 具体解释 private 私有的
/**
 * 使用private修饰属性
 * 自身：是可以访问的
 * 同包子类：不能继承
 * 不同包子类：不能继承
 * 同包类：不能访问
 * 其他包类：不能访问
 */

class Hero{

    //属性id是private的，只有Hero自己可以访问
    //子类不能继承
    //其他类也不能访问
    private int id;
    String name;
    float hp;
    float armor;
    public void equip(Weapon w){}
}

class Hero1{
    String name;

    // 无修饰符的属性 hp
    // 自己可以访问

    // 同包子类可以继承
    // 不同包子类不能继承

    // 同包类可以访问
    // 不同包类不能访问

    float hp;
    float armor;
    int moveSpeed;

    public void equip(Weapon w){}
}

class Hero2{
    String name;

    // protected饰符的属性 hp
    // 自己可以访问

    // 同包子类可以继承
    // 不同包子类可以继承

    // 同包类可以访问
    // 不同包类不能访问

    protected float hp;
    float armor;
    int moveSpeed;
    public void equip(Weapon w){}
}

class Hero3{
    private int id;

    // public的属性 name
    // 自己可以访问

    // 同包子类可以继承
    // 不同包子类可以继承

    // 同包类可以访问
    // 不同包类可以访问
    public String name;
    protected float hp;
    float armor;
    int moveSpeed;
    public void equip(Weapon w){}
}

/**
 * 那么什么情况该用什么修饰符呢？
 * 从作用域来看，public能够使用所有的情况。
 * 但是大家在工作的时候，又不会真正全部都使用public,
 * 那么到底什么情况该用什么修饰符呢？
 *
 * 1. 属性通常使用private封装起来
 * 2. 方法一般使用public用于被调用
 * 3. 会被子类继承的方法，通常使用protected
 * 4. package用的不多，一般新手会用package,
 * 因为还不知道有修饰符这个东西
 *
 * 再就是作用范围最小原则
 * 简单说，能用private就用private，不行就放大一级，
 * 用package,再不行就用protected，最后用public。
 * 这样就能把数据尽量的封装起来，没有必要露出来的，就不用露出来了
 */